package com.jie.algorithm.utils;

import android.content.Context;
import android.content.res.Resources;
import android.util.DisplayMetrics;
import android.util.TypedValue;

import java.lang.reflect.Field;

/**
 * 屏幕信息相关工具类
 */
public class ScreenUtils {

    /**
     * 获取屏幕信息对象
     * @param context
     */
    public static DisplayMetrics getDisplayMetrics(Context context){
        return context.getResources().getDisplayMetrics();
    }

    /**
     * 获取屏幕宽度
     * @param context
     */
    public static int getScreenWidth(Context context){
        return getDisplayMetrics(context).widthPixels;
    }

    /**
     * 获取屏幕高度
     * @param context
     */
    public static int getScreenHeight(Context context){
        return getDisplayMetrics(context).heightPixels;
    }

    /**
     * 获取屏幕密度
     * @param context
     */
    public static float getScreenDensity(Context context){
        return getDisplayMetrics(context).density;
    }

    /**
     * 单位转换 px -> dp
     * @param context
     * @param px
     */
    public static int px2Dp(Context context, int px){
        return (int)(px / getScreenDensity(context) + 0.5);
    }

    /**
     * 单位转换 dp -> px
     * @param context
     * @param dp
     */
    public static int dp2Px(Context context, int dp){
        return (int)(dp * getScreenDensity(context) + 0.5);
    }

    /**
     * 获取actionBar高度
     * @param context
     */
    public static int getActionBarHeight(Context context){
        int actionBarHeight = 0;
        TypedValue typedValue = new TypedValue();
        if (context.getTheme().resolveAttribute(android.R.attr.actionBarSize,typedValue,true)) {
            actionBarHeight  = TypedValue.complexToDimensionPixelSize(typedValue.data,getDisplayMetrics(context));
        }
        return actionBarHeight;
    }

    /**
     * 获取状态栏高度
     * @param context
     */
    public static int getStatusBarHeight(Context context){
        Resources resources = context.getResources();
        int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            return resources.getDimensionPixelSize(resourceId);
        }
        try {
            Class<?> c = Class.forName("com.android.internal.R$dimen");
            Object obj = c.newInstance();
            Field field = c.getField("status_bar_height");
            int x = Integer.parseInt(field.get(obj).toString());
            if(x > 0){
                return resources.getDimensionPixelSize(x);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }
}
